/*
对于一个置换，如[2 5 4 3 1]。
观察这个置换就会发现：1被2替换，2被5替换，5被2替换。
这就构成了一个轮换。同样3被4替换，4被3替换，也构成了另外一个轮换。
这样一个置换也可以用若干个轮换来表示。上述置换，就可以表示为(1 2 5)(3 4)。
一个置换中轮换的数量又称为置换的循环节个数。
输入一个置换，输出这个的循环节数。
输入分为两行。第一行n(1<=n<=100)。第二行是1到n的n个数，数据保证是一个置换。
样例输入：
5
2 5 4 3 1输出
2
*最好用函数实现。
*/

#include<iostream>

using namespace std;

int num[100];
//bool isRead[100];
int forNumber(int num[],int start,int n);


int  main(void)
{
  int n;
  cin >> n;
  for (int i = 0; i < n; i++) {
    cin >> num[i];
  }
  std::cout << forNumber(num,0,n) << '\n';

}

int forNumber(int num[],int start,int n) //n超尾
{
  bool isRead[n-start];
  for (int i = start; i < n; i++) {
    isRead[i-start] = true;
  }

  int count  = 0;

  for (int i = start; i < n; i++) {
    if(isRead[i])
    {
      int x = i;
      while (num[x]!=i) {
        isRead[x-start] = false;
        x = num[x];
      }
      count++;
    }
  }

  return count;
}
